{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introducing Tensorflow\n",
    "\n",
    "Be sure to install Tensorflow first!\n",
    "\n",
    "## The world's simplest Tensorflow application\n",
    "\n",
    "Let's begin by writing a really simple program to illustrate Tensorflow's main concepts. We'll set up two Variables, named \"a\" and \"b\", which each contain a tensor which contains a single value - the number 1, and the number 2.\n",
    "\n",
    "We then create a graph \"f\" that adds these two tensors together. But \"f = a + b\" just creates the graph; it doesn't actually perform the addition yet.\n",
    "\n",
    "Next we need to initialize any global variables before we run the graph.\n",
    "\n",
    "And finally, we create a Tensorflow Session object, run our variable initializer, and execute the graph with eval(). \n",
    "\n",
    "This returns the sum of 1 + 2 in a rather complex, yet highly scalable manner :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "\n",
    "a = tf.Variable(1, name=\"a\")\n",
    "b = tf.Variable(2, name=\"b\")\n",
    "f = a + b\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "with tf.Session() as s:\n",
    "    init.run()\n",
    "    print( f.eval() )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## And now for something more interesting: Handwriting recognition\n",
    "\n",
    "The standard example for machine learning these days is the MNIST data set, a collection of 70,000 handwriting samples of the numbers 0-9. Our challenge - to predict which number each handwritten image represents.\n",
    "\n",
    "Although we'll talk about neural networks that are specifically well suited for image recognition later, we actually don't need to go there for this relatively simple task. We can achieve decent without a whole lot of code.\n",
    "\n",
    "Each image is 28x28 grayscale pixels, so we can treat each image as just a 1D array, or tensor, of 784 numbers. As long as we're consistent in how we flatten each image into an array, it'll still work. Yes, it would be even better if we could preserve the 2D structure of the data while training - but we'll get there later.\n",
    "\n",
    "Let's start by importing the data set, which conveniently is part of tensorflow itself:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "\n",
    "sess = tf.InteractiveSession()\n",
    "\n",
    "mnist = tf.keras.datasets.mnist\n",
    "\n",
    "(x_train, y_train),(x_test, y_test) = mnist.load_data()\n",
    "\n",
    "train_images = x_train.reshape(60000, 784)\n",
    "test_images = x_test.reshape(10000, 784)\n",
    "train_images = train_images.astype('float32')\n",
    "test_images = test_images.astype('float32')\n",
    "\n",
    "x_train, x_test = train_images / 255.0, test_images / 255.0\n",
    "\n",
    "y_train = tf.keras.utils.to_categorical(y_train, 10)\n",
    "y_test = tf.keras.utils.to_categorical(y_test, 10)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "MNIST provides 60,000 samples in a training data set, 10,000 samples in a test data set, and 5,000 samples in a \"validation\" data set. We haven't talked about validation sets before, but their intent is to be used for model selection. So you'd use validation data to select your model, train the model with the training set, and then evaluate the model using the test data set.\n",
    "\n",
    "If you're new to the concept of train/test - it's important to evaluate the performance of our neural network using data it's never seen before. Otherwise it's kinda like giving students a math test for problems they already have the answers for. So, we use a completely different set of images to train our neural network from the images used for testing its accuracy.\n",
    "\n",
    "The training data, after we \"flatten\" it to one dimension using the reshape function, is therefore a tensor of shape [60,000, 784] - 60,000 instances of 784 numbers that represent each image.\n",
    "\n",
    "Next, we encode the label data as \"one_hot\" by calling to the to_categorical function. Think of one_hot as a binary representation of the label data - that is, which number each handwriting sample was intended to represent. Mathematically one_hot represents a dimension for every possible label value. Every dimension is set to the value 0, except for the \"correct\" one which is set to 1. For example, the label vector representing the number 1 would be [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] (remember we start counting at 0.) It's just a format that's optimized for how the labels are applied during training.\n",
    "\n",
    "So the test data is a tensor of shape [60,000, 10] - 60,000 test images each associated with 10 binary values that indicate whether or not the image represents a given number from 0-9.\n",
    "\n",
    "Let's define a little function to let us visualize what the input data looks like, and pick some random training image to see what it is we're up against:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def display_sample(num):\n",
    "    #Print the one-hot array of this sample's label \n",
    "    print(y_train[num])  \n",
    "    #Print the label converted back to a number\n",
    "    label = y_train[num].argmax(axis=0)\n",
    "    #Reshape the 768 values to a 28x28 image\n",
    "    image = x_train[num].reshape([28,28])\n",
    "    plt.title('Sample: %d  Label: %d' % (num, label))\n",
    "    plt.imshow(image, cmap=plt.get_cmap('gray_r'))\n",
    "    plt.show()\n",
    "    \n",
    "display_sample(1234)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So, you can see the \"one_hot\" representation of the number this image represents in the array that was printed out from the training label for image# 1234, as well as what this particular sample looks like. You can tell that some of the training data would even be challenging for a human to classify!\n",
    "\n",
    "Go ahead and try different input images to get a feel of the data we're given. Any value between 0 and 55,000 will work.\n",
    "\n",
    "As a reminder, we're flattening each image to a 1D array of 784 (28 x 28) numerical values. Each one of those values will be an input node into our deep neural network. Let's visualize how the data is being fed into it just to drive that point home:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "images = x_train[0].reshape([1,784])\n",
    "for i in range(1, 500):\n",
    "    images = np.concatenate((images, x_train[i].reshape([1,784])))\n",
    "plt.imshow(images, cmap=plt.get_cmap('gray_r'))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is showing the first 500 training samples, one on each row. Imagine each pixel on each row getting fed into the bottom layer of a neural network 768 neurons (or \"units\") wide as we train our neural network.\n",
    "\n",
    "So let's start setting up that artificial neural network. We'll start by creating \"placeholders\" for the input images and for the \"correct\" labels for each. Think of these as parameters - we build up our neural network model without knowledge of the actual data that will be fed into it; we just need to construct it in such a way that our data will fit in.\n",
    "\n",
    "So our \"input_images\" placeholder will be set up to hold an array of values that consist of 784 floats (28x28), and our \"target_labels\" placeholder will be set up to hold an array of values that consist of 10 floats (one-hot format for 10 digits.)\n",
    "\n",
    "While training, we'll assign input_images to the training images and target_labels to the training lables. While testing, we'll use the test images and test labels instead."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_images = tf.placeholder(tf.float32, shape=[None, 784])\n",
    "target_labels = tf.placeholder(tf.float32, shape=[None, 10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So let's set up our deep neural network. We'll need an input layer with one node per input pixel per image, or 784 nodes. That will feed into a hidden layer of some arbitrary size - let's pick 512. That hidden layer will output 10 values, corresonding to scores for each classification to be fed into softmax.\n",
    "\n",
    "We'll need to reserve variables to keep track of the all the weights and biases for both layers:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "hidden_nodes = 512\n",
    "\n",
    "input_weights = tf.Variable(tf.truncated_normal([784, hidden_nodes]))\n",
    "input_biases = tf.Variable(tf.zeros([hidden_nodes]))\n",
    "\n",
    "hidden_weights = tf.Variable(tf.truncated_normal([hidden_nodes, 10]))\n",
    "hidden_biases = tf.Variable(tf.zeros([10]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's set up the neural network itself. We'll define the input layer and associate it with our placeholder for input data. All this layer does is multiply these inputs by our input_weight tensor which will be learned over time.\n",
    "\n",
    "Then we'll feed that into our hidden layer, which applies the ReLU activation function to the weighted inputs with our learned biases added in as well.\n",
    "\n",
    "Finally our output layer, called digit_weights, multiplies in the learned weights of the hidden layer and adds in the hidden layer's bias term."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_layer = tf.matmul(input_images, input_weights)\n",
    "hidden_layer = tf.nn.relu(input_layer + input_biases)\n",
    "digit_weights = tf.matmul(hidden_layer, hidden_weights) + hidden_biases"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Make sure you noodle on the above block. This sets up a deep neural network like the one we talked about in our slides.\n",
    "\n",
    "output layer\n",
    "\n",
    "hidden layer\n",
    "\n",
    "input layer\n",
    "\n",
    "Next we will define our loss function for use in measuring our progress in gradient descent: cross-entropy, which applies a logarithmic scale to penalize incorrect classifications much more than ones that are close. Remember digit_weights is the output of our final layer, and we're comparing that against the target labels used for training."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss_function = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=digit_weights, labels=target_labels))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we will set up our gradient descent optimizer, initializing it with an aggressive learning rate (0.5) and our loss function defined above.\n",
    "\n",
    "That learning rate is an example of a hyperparameter that may be worth experimenting with and tuning."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss_function)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we'll want to train our neural network and measure its accuracy. First let's define some methods for measuring the accuracy of our trained model. \n",
    "\n",
    "correct_prediction will look at the output of our neural network (in digit_weights) and choose the label with the highest value, and see if that agrees with the target label given. During testing, digit_weights will be our prediction based on the test data we give the network, and target_labels is a placeholder that we will assign to our test labels. Ultimately this gives us a 1 for every correct classification, and a 0 for every incorrect classification.\n",
    "\n",
    "\"accuracy\" then takes the average of all the classifications to produce an overall score for our model's accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "correct_prediction = tf.equal(tf.argmax(digit_weights,1), tf.argmax(target_labels,1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's train this thing and see how it works! \n",
    "\n",
    "We'll set up a Tensorflow session, and initialize our variables. Next we will train our network in 20 steps (or \"epochs\") with batches of 100 samples from our training data. At each step, we assign the input_images placeholder to the current batch of training images, and the target_labels placeholder to the current batch of training labels.\n",
    "\n",
    "Once training is complete, we'll measure the accuracy of our model using the accuracy graph we defined above. While measuring accuracy, we assign the input_images placeholder to our test images, and the target_labels placeholder to our test labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training epoch 1\n",
      "Accuracy: 0.9046\n",
      "Training epoch 2\n",
      "Accuracy: 0.9243\n",
      "Training epoch 3\n",
      "Accuracy: 0.9299\n",
      "Training epoch 4\n",
      "Accuracy: 0.9309\n",
      "Training epoch 5\n",
      "Accuracy: 0.9376\n",
      "Training epoch 6\n",
      "Accuracy: 0.9364\n",
      "Training epoch 7\n",
      "Accuracy: 0.9391\n",
      "Training epoch 8\n",
      "Accuracy: 0.9407\n",
      "Training epoch 9\n",
      "Accuracy: 0.9444\n",
      "Training epoch 10\n",
      "Accuracy: 0.9419\n",
      "Training epoch 11\n",
      "Accuracy: 0.9458\n",
      "Training epoch 12\n",
      "Accuracy: 0.9431\n",
      "Training epoch 13\n",
      "Accuracy: 0.9454\n",
      "Training epoch 14\n",
      "Accuracy: 0.9468\n",
      "Training epoch 15\n",
      "Accuracy: 0.9462\n",
      "Training epoch 16\n",
      "Accuracy: 0.949\n",
      "Training epoch 17\n",
      "Accuracy: 0.9491\n",
      "Training epoch 18\n",
      "Accuracy: 0.9479\n",
      "Training epoch 19\n",
      "Accuracy: 0.9493\n",
      "Training epoch 20\n",
      "Accuracy: 0.951\n"
     ]
    }
   ],
   "source": [
    "tf.global_variables_initializer().run()\n",
    "\n",
    "EPOCH = 20\n",
    "BATCH_SIZE = 100\n",
    "TRAIN_DATASIZE,_ = x_train.shape\n",
    "PERIOD = TRAIN_DATASIZE//BATCH_SIZE\n",
    "\n",
    "for e in range(EPOCH):\n",
    "    idxs = np.random.permutation(TRAIN_DATASIZE)\n",
    "    X_random = x_train[idxs]\n",
    "    Y_random = y_train[idxs]\n",
    "\n",
    "    for i in range(PERIOD):\n",
    "        batch_X = X_random[i * BATCH_SIZE:(i+1) * BATCH_SIZE]\n",
    "        batch_Y = Y_random[i * BATCH_SIZE:(i+1) * BATCH_SIZE]\n",
    "        optimizer.run(feed_dict = {input_images: batch_X, target_labels:batch_Y})\n",
    "\n",
    "    print(\"Training epoch \" + str(e+1))\n",
    "    print(\"Accuracy: \" + str(accuracy.eval(feed_dict={input_images: x_test, target_labels: y_test})))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You should have about 95% accuracy. Not bad! But hey, we're just starting.\n",
    "\n",
    "Let's take a look at some of the misclassified images and see just how good or bad our model is, compared to what your own brain can do. We'll go through the first 100 test images and look at the ones that are misclassified:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for x in range(100):\n",
    "    # Load a single test image and its label\n",
    "    x_train_one = x_test[x,:].reshape(1,784)\n",
    "    y_train_one = y_test[x,:]\n",
    "    # Convert the one-hot label to an integer\n",
    "    label = y_train_one.argmax()\n",
    "    # Get the classification from our neural network's digit_weights final layer, and convert it to an integer\n",
    "    prediction = sess.run(digit_weights, feed_dict={input_images: x_train_one}).argmax()\n",
    "    # If the prediction does not match the correct label, display it\n",
    "    if (prediction != label) :\n",
    "        plt.title('Prediction: %d Label: %d' % (prediction, label))\n",
    "        plt.imshow(x_train_one.reshape([28,28]), cmap=plt.get_cmap('gray_r'))\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To be honest, I'd be a little unsure about some of those myself!\n",
    "\n",
    "## Exercise\n",
    "\n",
    "See if you can improve upon the accuracy. Try using more hidden neurons (nodes). Try using fewer! Try a different learning rate. Try adding another hidden layer. Try different batch sizes. What's the best accuracy you can get from this multi-layer perceptron?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
